package com.hwd.gmall.product.config;

import com.hwd.gmall.common.constant.ProductConst;
import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 商品管理微服务的rabbit配置类
 *
 * @author 黄伟东/Victor
 * @date 2022/5/9 15:27
 */
@Configuration
public class ProductRabbitConfig {

    /**
     * 创建sku数据同步的交换机
     *
     * @return org.springframework.amqp.core.Exchange
     */
    @Bean("skuExchange")
    public Exchange skuExchange() {
        return ExchangeBuilder.directExchange(ProductConst.SKU_EXCHANGE).build();
    }

    /**
     * 创建sku上架消息队列
     *
     * @return org.springframework.amqp.core.Queue
     */
    @Bean("skuUpperQueue")
    public Queue skuUpperQueue() {
        return QueueBuilder.durable(ProductConst.SKU_UPPER_QUEUE).build();
    }

    /**
     * 创建sku下架消息队列
     *
     * @return org.springframework.amqp.core.Queue
     */
    @Bean("skuDownQueue")
    public Queue skuDownQueue() {
        return QueueBuilder.durable(ProductConst.SKU_DOWN_QUEUE).build();
    }

    /**
     * sku数据同步交换机和sku上架消息队列进行绑定
     *
     * @param skuExchange   sku数据同步交换机
     * @param skuUpperQueue sku上架消息队列
     * @return org.springframework.amqp.core.Binding
     */
    @Bean
    public Binding upperBinding(@Qualifier("skuExchange") Exchange skuExchange,
                             @Qualifier("skuUpperQueue") Queue skuUpperQueue) {
        return BindingBuilder.bind(skuUpperQueue).to(skuExchange).with(ProductConst.SKU_UPPER_ROUTING_KEY).noargs();
    }

    /**
     * sku数据同步交换机和sku下架消息队列进行绑定
     *
     * @param skuExchange   sku数据同步交换机
     * @param skuDownQueue sku下架消息队列
     * @return org.springframework.amqp.core.Binding
     */
    @Bean
    public Binding downBinding(@Qualifier("skuExchange") Exchange skuExchange,
                             @Qualifier("skuDownQueue") Queue skuDownQueue) {
        return BindingBuilder.bind(skuDownQueue).to(skuExchange).with(ProductConst.SKU_DOWN_ROUTING_KEY).noargs();
    }
}
